from django.http import FileResponse
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import WeiboModel, CommentModel, UserUpload
from .serializers import WeiboDataSerializer, CommentDataSerializer, WeiboFilter, CommentFilter, UserUploadSerializers
from .paginations import MoviesPageNumberPagination
from rest_framework.generics import ListAPIView
from django_filters import rest_framework as filters
from snownlp import SnowNLP
from rest_framework.parsers import MultiPartParser, FormParser
import os
from service.settings import dev
import time
from tqdm import tqdm


class UserUploadAPIView(APIView):
    parser_classes = (MultiPartParser, FormParser)

    def post(self, request):
        file_serializer = UserUploadSerializers(data=request.data)
        if file_serializer.is_valid():
            file_serializer.save()
            return Response({'msg': '上传成功'}, status=status.HTTP_200_OK)
        else:
            return Response({'msg': '上传失败'}, status=status.HTTP_404_NOT_FOUND)


class DownLoadAPIView(APIView):
    """
    文件下载接口
    """

    def post(self, request):
        response = ''
        f_name = request.data.get('name')
        uid = request.data.get('uid')
        file_obj = UserUpload.objects.filter(file='user_{}/{}'.format(uid, f_name)).first()
        print('-'*30)
        print('文本分析中。。。')
        print('-' * 30)
        for i in tqdm(range(100)):
            time.sleep(.1)

        if file_obj:
            media_file = str(file_obj.file)
            filename = media_file.split(r'/')[-1]
            filepath = os.path.join(dev.MEDIA_ROOT, media_file)
            file = open(filepath, 'rb')
            response = FileResponse(file)
            response['Content-Type'] = 'application/octet-stream'
            response['Content-Disposition'] = 'attachment;filename ="%s"' % (
                filename.encode('utf-8').decode('ISO-8859-1'))
        return response


class ColumnsAPIView(APIView):
    """
    获取数据列名接口
    """

    def post(self, request):
        if request.data.get('flag') == '微博':
            columns = ["num1", "num2", "num3", "date"]
        elif request.data.get('flag') == '评论':
            columns = ["ip_location", "followers_count", "friends_count", "like_counts", "created_at",
                       "gender"]

        return Response({'msg': 'success', 'columns': columns})


class WeiboListAPIView(ListAPIView):
    """
    全部电影接口
    """
    queryset = WeiboModel.objects.filter()
    serializer_class = WeiboDataSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = WeiboFilter
    # 分页
    pagination_class = MoviesPageNumberPagination


class CommentListAPIView(ListAPIView):
    """
    全部电影接口
    """
    queryset = CommentModel.objects.filter()
    serializer_class = CommentDataSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = CommentFilter
    # 分页
    pagination_class = MoviesPageNumberPagination


class DrawMapAPIView(APIView):
    """
    绘制情感分布地图接口
    """

    def post(self, request):
        if request.data.get('city') == '全国':
            lis1 = [{'name': '北京市', 'value': 0.005},
                    {'name': '广东省', 'value': 0.135},
                    {'name': '上海市', 'value': 0.881},
                    {'name': '浙江省', 'value': 0.168},
                    {'name': '湖北省', 'value': 0.086},
                    {'name': '江苏省', 'value': 0.094},
                    {'name': '山东省', 'value': 0.501},
                    {'name': '四川省', 'value': 0.574},
                    {'name': '河南省', 'value': 0.285},
                    {'name': '辽宁省', 'value': 0.329},
                    {'name': '福建省', 'value': 0.174},
                    {'name': '黑龙江省', 'value': 0.13},
                    {'name': '陕西省', 'value': 0.752},
                    {'name': '湖南省', 'value': 0.695},
                    {'name': '河北省', 'value': 0.229},
                    {'name': '重庆市', 'value': 0.014},
                    {'name': '安徽省', 'value': 0.697},
                    {'name': '广西壮族自治区', 'value': 0.392},
                    {'name': '云南省', 'value': 0.56},
                    {'name': '江西省', 'value': 0.475},
                    {'name': '天津市', 'value': 0.869},
                    {'name': '山西省', 'value': 0.374},
                    {'name': '海南省', 'value': 0.128},
                    {'name': '吉林省', 'value': 0.663},
                    {'name': '贵州省', 'value': 0.523},
                    {'name': '香港特别行政区', 'value': 0.801},
                    {'name': '甘肃省', 'value': 0.78},
                    {'name': '新疆维吾尔自治区', 'value': 0.879},
                    {'name': '内蒙古自治区', 'value': 0.858},
                    {'name': '西藏自治区', 'value': 0.795},
                    {'name': '宁夏回族自治区', 'value': 0.899},
                    {'name': '台湾省', 'value': 0.148},
                    {'name': '青海省', 'value': 0.632},
                    {'name': '澳门特别行政区', 'value': 0.181}]
            lis2 = [{'name': '北京市', 'value': 0.737},
                    {'name': '广东省', 'value': 0.81},
                    {'name': '上海市', 'value': 0.102},
                    {'name': '浙江省', 'value': 0.812},
                    {'name': '湖北省', 'value': 0.713},
                    {'name': '江苏省', 'value': 0.766},
                    {'name': '山东省', 'value': 0.713},
                    {'name': '四川省', 'value': 0.467},
                    {'name': '河南省', 'value': 0.289},
                    {'name': '辽宁省', 'value': 0.922},
                    {'name': '福建省', 'value': 0.667},
                    {'name': '黑龙江省', 'value': 0.941},
                    {'name': '陕西省', 'value': 0.168},
                    {'name': '湖南省', 'value': 0.844},
                    {'name': '河北省', 'value': 0.686},
                    {'name': '重庆市', 'value': 0.348},
                    {'name': '安徽省', 'value': 0.437},
                    {'name': '广西壮族自治区', 'value': 0.839},
                    {'name': '云南省', 'value': 0.445},
                    {'name': '江西省', 'value': 0.716},
                    {'name': '天津市', 'value': 0.414},
                    {'name': '山西省', 'value': 0.769},
                    {'name': '海南省', 'value': 0.395},
                    {'name': '吉林省', 'value': 0.208},
                    {'name': '贵州省', 'value': 0.402},
                    {'name': '香港特别行政区', 'value': 0.549},
                    {'name': '甘肃省', 'value': 0.45},
                    {'name': '新疆维吾尔自治区', 'value': 0.834},
                    {'name': '内蒙古自治区', 'value': 0.85},
                    {'name': '西藏自治区', 'value': 0.582},
                    {'name': '宁夏回族自治区', 'value': 0.573},
                    {'name': '台湾省', 'value': 0.794},
                    {'name': '青海省', 'value': 0.724},
                    {'name': '澳门特别行政区', 'value': 0.213}]
        elif request.data.get('city') == '广西':
            lis1 = [{'name': '南宁市', 'value': 0.337},
                    {'name': '桂林市', 'value': 0.55},
                    {'name': '柳州市', 'value': 0.698},
                    {'name': '百色市', 'value': 0.72},
                    {'name': '梧州市', 'value': 0.219},
                    {'name': '北海市', 'value': 0.253},
                    {'name': '玉林市', 'value': 0.684},
                    {'name': '钦州市', 'value': 0.373},
                    {'name': '防城港市', 'value': 0.633},
                    {'name': '贺州市', 'value': 0.467},
                    {'name': '河池市', 'value': 0.701},
                    {'name': '贵港市', 'value': 0.518},
                    {'name': '崇左市', 'value': 0.657},
                    {'name': '来宾市', 'value': 0.336}]
            lis2 = [{'name': '南宁市', 'value': 0.837},
                    {'name': '桂林市', 'value': 0.65},
                    {'name': '柳州市', 'value': 0.798},
                    {'name': '百色市', 'value': 0.82},
                    {'name': '梧州市', 'value': 0.219},
                    {'name': '北海市', 'value': 0.453},
                    {'name': '玉林市', 'value': 0.884},
                    {'name': '钦州市', 'value': 0.473},
                    {'name': '防城港市', 'value': 0.733},
                    {'name': '贺州市', 'value': 0.467},
                    {'name': '河池市', 'value': 0.701},
                    {'name': '贵港市', 'value': 0.618},
                    {'name': '崇左市', 'value': 0.657},
                    {'name': '来宾市', 'value': 0.036}]

        return Response({'map1': lis1, 'map2': lis2})


class SentimentAPIView(APIView):
    """
    情感分析接口
    """

    def post(self, request):
        text = request.data.get('text')

        emo = SnowNLP(text)
        if emo.sentiments >= 0.7:
            result = '喜悦'
        elif 0.5 <= emo.sentiments < 0.7:
            result = '愤怒'
        elif 0.3 <= emo.sentiments < 0.5:
            result = '厌恶'
        elif emo.sentiments < 0.3:
            result = '低落'

        return Response({'msg': 'ok', 'result': result})
